Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / scripts / fetch-micron-wasm.mjs

Displaying Raw • Download


scripts/fetch-micron-wasm.mjs f952cede7397a82bd141197f8df71a612a9b770e (f952cede) Text, 9.14 KB

T8b949e#!/usr/bin/env node
T8b949e/**
* Downloads micron-parser-go WASM release assets and matching wasm_exec.js for Vite public/.
* Generates SRI hashes for integrity verification at runtime.
* Skips large downloads when upstream hashes match local files (SHASUMS256.txt + conditional GET).
* Safe to run offline: exits 0 without deleting vendor files when MICRON_WASM_SKIP=1 or network fails.
*
* Override URLs:
* MICRON_PARSER_GO_WASM_URL
* MICRON_GO_WASM_EXEC_URL
*/
Tff7b72import Te6edf3fs Tff7b72from Ta5d6ff"fs"Tb4b4b4;
Tff7b72import Te6edf3path Tff7b72from Ta5d6ff"path"Tb4b4b4;
Tff7b72import Te6edf3crypto Tff7b72from Ta5d6ff"crypto"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3MICRON_PARSER_GO_RELEASE_TAG Tb4b4b4} Tff7b72from Ta5d6ff"./micron-parser-go-version.mjs"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3micronWasmVendorPathsTb4b4b4, Te6edf3micronWasmRepoRoot Tb4b4b4} Tff7b72from Ta5d6ff"./micron-wasm-resolve-bundled.mjs"Tb4b4b4;

Tff7b72const Te6edf3WASM_FILENAME Tff7b72= Ta5d6ff"micron-parser-go.wasm"Tb4b4b4;
Tff7b72const Te6edf3SHASUMS256_FILENAME Tff7b72= Ta5d6ff"SHASUMS256.txt"Tb4b4b4;

T8b949e/** Same line parsing as MicronWasmRuntimeOverride.parseShasums256ForFilename (GNU/BSD shasum). */
Tff7b72function Te6edf3parseShasums256ForFilenameTb4b4b4(Te6edf3textTb4b4b4, Te6edf3filenameTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3text Tff7b72== Tff7b72null Tff7b72|| Te6edf3filename Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3lines Tff7b72= Tffa657StringTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff/\r?\n/Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3raw Tff7b72of Te6edf3linesTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3line Tff7b72= Te6edf3rawTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3line Tff7b72|| Te6edf3lineTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"#"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3m Tff7b72= Te6edf3lineTb4b4b4.Te6edf3matchTb4b4b4(Ta5d6ff/^([a-fA-F0-9]{64})\s+\*?(\S+)\s*$/Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mTb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3name Tff7b72= Te6edf3mTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3name Tff7b72=== Te6edf3filename Tff7b72|| Te6edf3nameTb4b4b4.Te6edf3endsWithTb4b4b4(Ta5d6ff`Ta5d6ff/Tffd700${Te6edf3filenameTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3mTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3DEFAULT_WASM_URL Tff7b72= Ta5d6ff`Ta5d6ffhttps://github.com/Quad4-Software/Micron-Parser-Go/releases/download/Tffd700${Te6edf3MICRON_PARSER_GO_RELEASE_TAGTffd700}Ta5d6ff/micron-parser-go.wasmTa5d6ff`Tb4b4b4;
Tff7b72const Te6edf3DEFAULT_WASM_EXEC_URL Tff7b72= Ta5d6ff"https://raw.githubusercontent.com/golang/go/go1.26.2/lib/wasm/wasm_exec.js"Tb4b4b4;

Tff7b72const Te6edf3TIMEOUT_MS Tff7b72= Tffa657NumberTb4b4b4(Te6edf3processTb4b4b4.Te6edf3envTb4b4b4.Te6edf3MICRON_WASM_FETCH_TIMEOUT_MS Tff7b72|| T79c0ff120000Tb4b4b4)Tb4b4b4;

Tff7b72function Te6edf3rmQuietTb4b4b4(Te6edf3pTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3fsTb4b4b4.Te6edf3rmSyncTb4b4b4(Te6edf3pTb4b4b4, Tb4b4b4{ Te6edf3forceTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e/* ignore */
Tb4b4b4}
Tb4b4b4}

Tff7b72function Te6edf3computeSriHashTb4b4b4(Te6edf3bufTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3hash Tff7b72= Te6edf3cryptoTb4b4b4.Te6edf3createHashTb4b4b4(Ta5d6ff"sha384"Tb4b4b4)Tb4b4b4.Te6edf3updateTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4.Te6edf3digestTb4b4b4(Ta5d6ff"base64"Tb4b4b4)Tb4b4b4;
Tff7b72return Ta5d6ff`Ta5d6ffsha384-Tffd700${Te6edf3hashTffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}

Tff7b72function Te6edf3sha256HexOfFileTb4b4b4(Te6edf3filePathTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3buf Tff7b72= Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3filePathTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3cryptoTb4b4b4.Te6edf3createHashTb4b4b4(Ta5d6ff"sha256"Tb4b4b4)Tb4b4b4.Te6edf3updateTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4.Te6edf3digestTb4b4b4(Ta5d6ff"hex"Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72function Te6edf3shasumsUrlFromWasmUrlTb4b4b4(Te6edf3wasmUrlTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3u Tff7b72= Tff7b72new Te6edf3URLTb4b4b4(Te6edf3wasmUrlTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3dirPath Tff7b72= Te6edf3uTb4b4b4.Te6edf3pathnameTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/[^/]+$/Tb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;
Te6edf3uTb4b4b4.Te6edf3pathname Tff7b72= Ta5d6ff`Tffd700${Te6edf3dirPathTffd700}Tffd700${Te6edf3SHASUMS256_FILENAMETffd700}Ta5d6ff`Tb4b4b4;
Tff7b72return Te6edf3uTb4b4b4.Te6edf3hrefTb4b4b4;
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3fetchWithTimeoutTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ctrl Tff7b72= Tff7b72new Te6edf3AbortControllerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3t Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3ctrlTb4b4b4.Te6edf3abortTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3TIMEOUT_MSTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72return Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3urlTb4b4b4, Tb4b4b4{ Tb4b4b4...Te6edf3optionsTb4b4b4, Te6edf3signalTff7b72: Te6edf3ctrlTb4b4b4.Te6edf3signal Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3clearTimeoutTb4b4b4(Te6edf3tTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3fetchBinaryTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3destFileTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3res Tff7b72= Tff7b72await Te6edf3fetchWithTimeoutTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3resTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffHTTP Tffd700${Te6edf3resTb4b4b4.Te6edf3statusTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3buf Tff7b72= Te6edf3BufferTb4b4b4.Tff7b72fromTb4b4b4(Tff7b72await Te6edf3resTb4b4b4.Te6edf3arrayBufferTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3fsTb4b4b4.Te6edf3mkdirSyncTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3dirnameTb4b4b4(Te6edf3destFileTb4b4b4)Tb4b4b4, Tb4b4b4{ Te6edf3recursiveTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3fsTb4b4b4.Te6edf3writeFileSyncTb4b4b4(Te6edf3destFileTb4b4b4, Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3etag Tff7b72= Te6edf3resTb4b4b4.Te6edf3headersTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"etag"Tb4b4b4) Tff7b72|| Tff7b72undefinedTb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3sizeTff7b72: Te6edf3bufTb4b4b4.Te6edf3lengthTb4b4b4, Te6edf3sriTff7b72: Te6edf3computeSriHashTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4, Te6edf3etag Tb4b4b4}Tb4b4b4;
Tb4b4b4}

T8b949e/**
* Uses If-None-Match when we have a prior ETag to avoid re-downloading wasm_exec.js if unchanged.
*/
Tff7b72async Tff7b72function Te6edf3fetchWasmExecResolvedTb4b4b4(Te6edf3execUrlTb4b4b4, Te6edf3wasmExecPathTb4b4b4, Te6edf3prevTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3sameUrl Tff7b72= Te6edf3prevTff7b72?Tb4b4b4.Te6edf3wasmExecSourceUrl Tff7b72=== Te6edf3execUrlTb4b4b4;
Tff7b72const Te6edf3inm Tff7b72= Te6edf3sameUrl Tff7b72&& Te6edf3prevTff7b72?Tb4b4b4.Te6edf3wasmExecEtag Tff7b72? Te6edf3prevTb4b4b4.Te6edf3wasmExecEtag Tff7b72: Tff7b72undefinedTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3inm Tff7b72&& Te6edf3fsTb4b4b4.Te6edf3existsSyncTb4b4b4(Te6edf3wasmExecPathTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3res Tff7b72= Tff7b72await Te6edf3fetchWithTimeoutTb4b4b4(Te6edf3execUrlTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{ Ta5d6ff"If-None-Match"Tff7b72: Te6edf3inm Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3resTb4b4b4.Te6edf3status Tff7b72=== T79c0ff304Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3buf Tff7b72= Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3wasmExecPathTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3sizeTff7b72: Te6edf3bufTb4b4b4.Te6edf3lengthTb4b4b4,
Te6edf3sriTff7b72: Te6edf3computeSriHashTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4,
Te6edf3etagTff7b72: Te6edf3inmTb4b4b4,
Te6edf3downloadedTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3resTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3buf Tff7b72= Te6edf3BufferTb4b4b4.Tff7b72fromTb4b4b4(Tff7b72await Te6edf3resTb4b4b4.Te6edf3arrayBufferTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3fsTb4b4b4.Te6edf3mkdirSyncTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3dirnameTb4b4b4(Te6edf3wasmExecPathTb4b4b4)Tb4b4b4, Tb4b4b4{ Te6edf3recursiveTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3fsTb4b4b4.Te6edf3writeFileSyncTb4b4b4(Te6edf3wasmExecPathTb4b4b4, Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3etag Tff7b72= Te6edf3resTb4b4b4.Te6edf3headersTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"etag"Tb4b4b4) Tff7b72|| Tff7b72undefinedTb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3sizeTff7b72: Te6edf3bufTb4b4b4.Te6edf3lengthTb4b4b4,
Te6edf3sriTff7b72: Te6edf3computeSriHashTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4,
Te6edf3etagTb4b4b4,
Te6edf3downloadedTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffHTTP Tffd700${Te6edf3resTb4b4b4.Te6edf3statusTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3got Tff7b72= Tff7b72await Te6edf3fetchBinaryTb4b4b4(Te6edf3execUrlTb4b4b4, Te6edf3wasmExecPathTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Tb4b4b4...Te6edf3gotTb4b4b4, Te6edf3downloadedTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72function Te6edf3readIntegrityJsonTb4b4b4(Te6edf3integrityPathTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3raw Tff7b72= Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3integrityPathTb4b4b4, Ta5d6ff"utf8"Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3mainTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3processTb4b4b4.Te6edf3envTb4b4b4.Te6edf3MICRON_WASM_SKIP Tff7b72=== Ta5d6ff"1"Tb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"fetch-micron-wasm: MICRON_WASM_SKIP=1, skipping."Tb4b4b4)Tb4b4b4;
Te6edf3processTb4b4b4.Te6edf3exitTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3root Tff7b72= Te6edf3micronWasmRepoRootTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Tb4b4b4{ Te6edf3wasmTb4b4b4, Te6edf3wasmExec Tb4b4b4} Tff7b72= Te6edf3micronWasmVendorPathsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3processTb4b4b4.Te6edf3envTb4b4b4.Te6edf3MESHCHATX_OFFLINE_BUILD Tff7b72=== Ta5d6ff"1"Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3fsTb4b4b4.Te6edf3existsSyncTb4b4b4(Te6edf3wasmTb4b4b4) Tff7b72|| Tff7b72!Te6edf3fsTb4b4b4.Te6edf3existsSyncTb4b4b4(Te6edf3wasmExecTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(
Ta5d6ff"fetch-micron-wasm: MESHCHATX_OFFLINE_BUILD=1 but micron-parser-go.wasm or wasm_exec.js is missing."
Tb4b4b4)Tb4b4b4;
Te6edf3processTb4b4b4.Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"fetch-micron-wasm: MESHCHATX_OFFLINE_BUILD=1 and artifacts present, skipping fetch."Tb4b4b4)Tb4b4b4;
Te6edf3processTb4b4b4.Te6edf3exitTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Tb4b4b4{ Te6edf3dir Tb4b4b4} Tff7b72= Te6edf3micronWasmVendorPathsTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wasmUrl Tff7b72= Te6edf3processTb4b4b4.Te6edf3envTb4b4b4.Te6edf3MICRON_PARSER_GO_WASM_URL Tff7b72|| Te6edf3DEFAULT_WASM_URLTb4b4b4;
Tff7b72const Te6edf3execUrl Tff7b72= Te6edf3processTb4b4b4.Te6edf3envTb4b4b4.Te6edf3MICRON_GO_WASM_EXEC_URL Tff7b72|| Te6edf3DEFAULT_WASM_EXEC_URLTb4b4b4;
Tff7b72const Te6edf3integrityPath Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3dirTb4b4b4, Ta5d6ff"integrity.json"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3prev Tff7b72= Te6edf3readIntegrityJsonTb4b4b4(Te6edf3integrityPathTb4b4b4)Tb4b4b4;

Te6edf3fsTb4b4b4.Te6edf3mkdirSyncTb4b4b4(Te6edf3dirTb4b4b4, Tb4b4b4{ Te6edf3recursiveTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72let Te6edf3passedShasumsFetch Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3shasumsUrl Tff7b72= Te6edf3shasumsUrlFromWasmUrlTb4b4b4(Te6edf3wasmUrlTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3sumsRes Tff7b72= Tff7b72await Te6edf3fetchWithTimeoutTb4b4b4(Te6edf3shasumsUrlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3sumsResTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffSHASUMS256 HTTP Tffd700${Te6edf3sumsResTb4b4b4.Te6edf3statusTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3passedShasumsFetch Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3sumsText Tff7b72= Tff7b72await Te6edf3sumsResTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3upstreamWasmSha256 Tff7b72= Te6edf3parseShasums256ForFilenameTb4b4b4(Te6edf3sumsTextTb4b4b4, Te6edf3WASM_FILENAMETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3upstreamWasmSha256Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Tffd700${Te6edf3WASM_FILENAMETffd700}Ta5d6ff not listed in Tffd700${Te6edf3SHASUMS256_FILENAMETffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3wasmHashMatches Tff7b72= Te6edf3fsTb4b4b4.Te6edf3existsSyncTb4b4b4(Te6edf3wasmTb4b4b4) Tff7b72&& Te6edf3sha256HexOfFileTb4b4b4(Te6edf3wasmTb4b4b4)Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4) Tff7b72=== Te6edf3upstreamWasmSha256Tb4b4b4;
Tff7b72let Te6edf3wasmResultTb4b4b4;
Tff7b72let Te6edf3wasmDownloaded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wasmHashMatchesTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(
Ta5d6ff`Ta5d6fffetch-micron-wasm: Tffd700${Te6edf3WASM_FILENAMETffd700}Ta5d6ff unchanged (SHA-256 matches upstream Tffd700${Te6edf3SHASUMS256_FILENAMETffd700}Ta5d6ff), skipping download.Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3buf Tff7b72= Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3wasmTb4b4b4)Tb4b4b4;
Te6edf3wasmResult Tff7b72= Tb4b4b4{ Te6edf3sizeTff7b72: Te6edf3bufTb4b4b4.Te6edf3lengthTb4b4b4, Te6edf3sriTff7b72: Te6edf3computeSriHashTb4b4b4(Te6edf3bufTb4b4b4) Tb4b4b4}Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff`Ta5d6fffetch-micron-wasm: downloading Tffd700${Te6edf3WASM_FILENAMETffd700}Ta5d6ff...Ta5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3wasmResult Tff7b72= Tff7b72await Te6edf3fetchBinaryTb4b4b4(Te6edf3wasmUrlTb4b4b4, Te6edf3wasmTb4b4b4)Tb4b4b4;
Te6edf3wasmDownloaded Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}

Tff7b72let Te6edf3execResult Tff7b72= Tff7b72await Te6edf3fetchWasmExecResolvedTb4b4b4(Te6edf3execUrlTb4b4b4, Te6edf3wasmExecTb4b4b4, Te6edf3prevTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3execResultTb4b4b4.Te6edf3downloadedTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"fetch-micron-wasm: wasm_exec.js unchanged (304 Not Modified), skipping download."Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3prevTff7b72?Tb4b4b4.Te6edf3wasmExecEtag Tff7b72&& Te6edf3prevTff7b72?Tb4b4b4.Te6edf3wasmExecSourceUrl Tff7b72=== Te6edf3execUrlTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"fetch-micron-wasm: wasm_exec.js updated from upstream."Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"fetch-micron-wasm: wasm_exec.js downloaded."Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3downloads Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wasmDownloadedTb4b4b4) Te6edf3downloadsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3WASM_FILENAMETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3execResultTb4b4b4.Te6edf3downloadedTb4b4b4) Te6edf3downloadsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"wasm_exec.js"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3downloadsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"fetch-micron-wasm: OK (no downloads; artifacts match upstream)."Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff`Ta5d6fffetch-micron-wasm: OK (Tffd700${Te6edf3wasmResultTb4b4b4.Te6edf3sizeTffd700}Ta5d6ff bytes WASM; fetched: Tffd700${Te6edf3downloadsTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff", "Tb4b4b4)Tffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3integrity Tff7b72= Tb4b4b4{
Te6edf3versionTff7b72: Te6edf3MICRON_PARSER_GO_RELEASE_TAGTb4b4b4,
Te6edf3wasmTff7b72: Te6edf3wasmResultTb4b4b4.Te6edf3sriTb4b4b4,
Te6edf3wasmExecTff7b72: Te6edf3execResultTb4b4b4.Te6edf3sriTb4b4b4,
Te6edf3wasmExecSourceUrlTff7b72: Te6edf3execUrlTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3execResultTb4b4b4.Te6edf3etagTb4b4b4) Tb4b4b4{
Te6edf3integrityTb4b4b4.Te6edf3wasmExecEtag Tff7b72= Te6edf3execResultTb4b4b4.Te6edf3etagTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3nextIntegrityJson Tff7b72= Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3integrityTb4b4b4, Tff7b72nullTb4b4b4, T79c0ff2Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3prevIntegrityRaw Tff7b72=
Te6edf3fsTb4b4b4.Te6edf3existsSyncTb4b4b4(Te6edf3integrityPathTb4b4b4) Tff7b72&& Te6edf3fsTb4b4b4.Te6edf3statSyncTb4b4b4(Te6edf3integrityPathTb4b4b4)Tb4b4b4.Te6edf3isFileTb4b4b4(Tb4b4b4)
Tff7b72? Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3integrityPathTb4b4b4, Ta5d6ff"utf8"Tb4b4b4)
Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prevIntegrityRaw Tff7b72!== Te6edf3nextIntegrityJsonTb4b4b4) Tb4b4b4{
Te6edf3fsTb4b4b4.Te6edf3writeFileSyncTb4b4b4(Te6edf3integrityPathTb4b4b4, Te6edf3nextIntegrityJsonTb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"fetch-micron-wasm: SRI hashes written to integrity.json"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"fetch-micron-wasm: integrity.json unchanged."Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(Ta5d6ff"fetch-micron-wasm: failed:"Tb4b4b4, Te6edf3eTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3passedShasumsFetchTb4b4b4) Tb4b4b4{
Te6edf3rmQuietTb4b4b4(Te6edf3wasmTb4b4b4)Tb4b4b4;
Te6edf3rmQuietTb4b4b4(Te6edf3wasmExecTb4b4b4)Tb4b4b4;
Te6edf3rmQuietTb4b4b4(Te6edf3integrityPathTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3processTb4b4b4.Te6edf3exitTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3mainTb4b4b4(Tb4b4b4)Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────